package services

import (
	"net/http"
	"src/dao"
	"src/entity"
	"src/response"
	"time"

	"github.com/gin-gonic/gin"
)

func Login(c *gin.Context) {
	// 定义请求参数
	var user entity.User
	var isAvailable bool

	// 绑定请求参数
	if err := c.ShouldBindJSON(&user); err != nil {
		c.JSON(400, gin.H{"error": "Invalid request"})
		return
	}

	// 查询钱包地址,是否已经有对应数据
	existingUser := dao.GetUserByWalletAddress(user.WalletAddress)

	// 用户未注册,插入用户数据,注册
	if existingUser.ID == 0 {
		// 设置注册时间
		user.RegistrationTime = time.Now()
		if err := dao.InsertUser(&user); err != nil {
			c.JSON(500, gin.H{"error": "Failed to insert user"})
			return
		}
		// 获取刚插入的用户 ID
		existingUser = user
	}

	// 判断是否过期：检查ExpirationTime是否在当前时间之前
	if existingUser.ExpirationTime == nil || existingUser.ExpirationTime.Before(time.Now()) {
		// 过期，功能不可用
		isAvailable = false
	} else {
		// 没有过期，功能可用
		isAvailable = true
	}

	// 调用 DAO 层的 SelectPages 函数
	// 查询展示给用户的标签页
	pages, err := dao.SelectPages(isAvailable)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to retrieve pages"})
		return
	}

	// 创建 LoginResponse 响应对象
	loginResponse := response.LoginResponse{
		ID:               existingUser.ID,
		IsBlacklisted:    existingUser.IsBlacklisted,
		RegistrationTime: existingUser.RegistrationTime,
		IsAvailable:      isAvailable, // 修改为大写
		Pages:            pages,
	}

	// 返回 JSON 响应
	c.JSON(200, loginResponse)
}

func GetUser(c *gin.Context) {
	list := dao.GetUser()
	c.JSON(200, gin.H{
		"list": list,
	})

}
